package com.yhn.bubblevideo.user.controller;

import cn.dev33.satoken.annotation.SaCheckLogin;
import com.yhn.bubblevideo.common.model.BaseResponse;
import com.yhn.bubblevideo.common.model.ResultUtils;
import com.yhn.bubblevideo.model.dto.req.user.UserLoginRequestDTO;
import com.yhn.bubblevideo.model.dto.req.user.UserRegisterRequestDTO;
import com.yhn.bubblevideo.model.dto.resp.UserLoginRespDTO;
import com.yhn.bubblevideo.user.service.UserService;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.springframework.web.bind.annotation.*;


/**
 * @author yhn
 * @version 1.0
 * @description
 * @date 2024/9/21 10:18
 */
@RestController
public class UserController {
    @Resource
    private UserService userService;

    /**
     * 用户注册
     *
     * @param requestParam 用户注册请求
     * @return 用户注册ID
     */
    @PostMapping("/register")
    public BaseResponse<String> userRegister(@RequestBody @Valid UserRegisterRequestDTO requestParam) {

        userService.userRegister(requestParam);
        return ResultUtils.success("注册成功，请前往登录页面登录");
    }

    /**
     * 用户登录
     *
     * @param requestParam 用户登录请求
     * @return 登录成功后的用户信息
     */
    @PostMapping("/login")
    public BaseResponse<UserLoginRespDTO> userLogin(@RequestBody @Valid UserLoginRequestDTO requestParam) {
        return ResultUtils.success(userService.userLogin(requestParam));
    }

    /**
     * 用户注销
     *
     * @return 是否注销成功
     */
    @PostMapping("/logout")
    @SaCheckLogin
    public BaseResponse<Boolean> userLogout() {
        return ResultUtils.success(userService.userLogout());
    }

    /**
     * 获取当前登录用户
     *
     * @return 当前登录的用户
     */
    @GetMapping("/get/login")
    @SaCheckLogin
    public BaseResponse<UserLoginRespDTO> getLoginUser() {
        return ResultUtils.success(userService.getLoginUser());
    }

    /**
     * 向用户发送验证码
     *
     * @return 当前登录的用户
     */
    @PostMapping("/send/code")
    public BaseResponse<String> sendCode(@RequestParam("email") String email) {
        userService.sendMessage(email);
        return ResultUtils.success("发送邮件成功");
    }
}
